package core

import (
	"fastgin/global"
	"time"

	"github.com/sirupsen/logrus"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
	"gorm.io/gorm/schema"
)

// 简单工厂模式实现选择不同的数据库操作
func InitGorm() (db *gorm.DB) {
	// 初始化 GORM Logger
	// gormLogger := NewGORMLogger()
	cfg := global.Config.DB
	var dialector = cfg.Dsn()
	if dialector == nil {
		return
	}

	db, err := gorm.Open(dialector, &gorm.Config{
		DisableForeignKeyConstraintWhenMigrating: true, //不生成实体外键
		NamingStrategy: schema.NamingStrategy{
			SingularTable: true, //禁用表名为复数形式-->users
		},
		Logger: logger.Default.LogMode(logger.Info), //打印info级别的sql
	})
	if err != nil {
		logrus.Fatalf("数据库连接失败 %s", err)
	}

	//配置连接池
	sqlDB, err := db.DB()
	if err != nil {
		logrus.Fatalf("获取数据库连接失败 %s", err)
	}
	err = sqlDB.Ping()
	if err != nil {
		logrus.Fatalf("数据库连接失败 %s", err)
	}
	sqlDB.SetMaxIdleConns(10)
	sqlDB.SetMaxOpenConns(2000)
	sqlDB.SetConnMaxLifetime(time.Hour)
	logrus.Infof("%s 数据库连接成功", cfg.Mode)
	return
}
